home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / SNNSV32.ZIP / SNNSv3.2 / xgui / sources / d3_units.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-04-25  |  9.5 KB  |  268 lines

  1. /*****************************************************************************
  2.   FILE           : d3_units.c
  3.   SHORTNAME      : units.c
  4.   SNNS VERSION   : 3.2
  5.  
  6.   PURPOSE        : controls the unit pannel
  7.   NOTES          :
  8.  
  9.   AUTHOR         : Ralf Huebner
  10.   DATE           : 1.12.1991
  11.  
  12.   CHANGED BY     :
  13.   IDENTIFICATION : @(#)d3_units.c    1.10 3/2/94
  14.   SCCS VERSION   : 1.10
  15.   LAST CHANGE    : 3/2/94
  16.  
  17.              Copyright (c) 1990-1994  SNNS Group, IPVR, Univ. Stuttgart, FRG
  18.              
  19. ******************************************************************************/
  20.  
  21.  
  22. #include <stdio.h>
  23. #include <memory.h>
  24.  
  25. #include <X11/Xlib.h>
  26. #include <X11/Xutil.h>
  27. #include <X11/Intrinsic.h>
  28. #include <X11/StringDefs.h>
  29. #include <X11/Shell.h>
  30. #include <X11/Xaw/Simple.h>
  31. #include <X11/Xaw/Box.h>
  32. #include <X11/Xaw/Form.h>
  33. #include <X11/Xaw/Toggle.h>
  34.  
  35. #include "ui.h"
  36. #include "glob_typ.h"
  37. #include "ui_xWidgets.h"
  38. #include "d3_global.h"
  39. #include "d3_xUtils.h"
  40. #include "d3_main.h"
  41.  
  42. #include "d3_units.ph"
  43.  
  44.  
  45. /*****************************************************************************
  46.   FUNCTION : d3_closeUnitPannel
  47.  
  48.   PURPOSE  : closes the unit pannel
  49.   RETURNS  : void
  50.   NOTES    :
  51.  
  52.   UPDATE   :
  53. ******************************************************************************/
  54.  
  55. static void d3_closeUnitPannel (Widget w, Widget pannel, caddr_t call_data)
  56.  
  57. {
  58.     XtDestroyWidget (pannel);
  59.     if (memcmp (&d3_state.unit_mode, &temp_unit_mode, 
  60.                 sizeof (d3_unit_mode_type)) != 0) {
  61.          memcpy (&d3_state.unit_mode, &temp_unit_mode, 
  62.                  sizeof (d3_unit_mode_type)); 
  63.          d3_drawNet ();
  64.     }
  65. }
  66.  
  67.  
  68. /*****************************************************************************
  69.   FUNCTION : d3_setUnitMode
  70.  
  71.   PURPOSE  : sets the toggles in the lower part of the unit pannel
  72.   RETURNS  : void
  73.   NOTES    : return if monochrome display and color selected
  74.  
  75.   UPDATE   :
  76. ******************************************************************************/
  77.  
  78. static void d3_setUnitMode (Widget w, int mode, caddr_t call_data)
  79.  
  80. {
  81.     Boolean activflag, initflag, outflag, biasflag;
  82.     Boolean nameflag, numflag, zflag, noneflag;
  83.  
  84.     if ((d3_state.color_mode == mono_mode) && (mode == select_color))
  85.         return;
  86.     activflag = initflag = outflag = biasflag = FALSE;
  87.     nameflag = numflag = zflag = noneflag = FALSE;
  88.     toggled_unit_mode = mode;
  89.     switch (mode) {
  90.         case activation_on  : activflag = TRUE;
  91.                               break;    
  92.         case init_act_on    : initflag = TRUE;
  93.                               break;    
  94.         case output_on      : outflag = TRUE;
  95.                               break;    
  96.         case bias_on        : biasflag = TRUE;
  97.                               break;    
  98.         case name_on        : nameflag = TRUE;
  99.                               break;    
  100.         case number_on      : numflag = TRUE;
  101.                               break;    
  102.         case zvalue_on      : zflag = TRUE;
  103.                               break;    
  104.         case nothing_on     : noneflag = TRUE;
  105.                               break;    
  106.     }
  107.     ui_xSetToggleState (activation, activflag);    
  108.     ui_xSetToggleState (initact, initflag);    
  109.     ui_xSetToggleState (output, outflag);    
  110.     ui_xSetToggleState (bias, biasflag);    
  111.     ui_xSetToggleState (name, nameflag);    
  112.     ui_xSetToggleState (number, numflag);    
  113.     ui_xSetToggleState (zvalue, zflag);    
  114.     ui_xSetToggleState (nothing, noneflag);    
  115.     switch (selected_unit_mode) {
  116.         case select_size      : temp_unit_mode.size = mode;
  117.                                 break;
  118.         case select_color     : if (d3_state.color_mode == mono_mode)
  119.                                    break;
  120.                                 temp_unit_mode.color = mode;
  121.                                 break;
  122.         case select_toplabel  : temp_unit_mode.top_label = mode;
  123.                                 break;
  124.         case select_bottlabel : temp_unit_mode.bottom_label = mode;
  125.                                 break;
  126.     }
  127. }
  128.  
  129.  
  130. /*****************************************************************************
  131.   FUNCTION : d3_selectUnitMode
  132.  
  133.   PURPOSE  : sets the toggles in the upper part of the unit pannel
  134.   RETURNS  : void
  135.   NOTES    : return if monochrome display and color selected
  136.  
  137.   UPDATE   :
  138. ******************************************************************************/
  139.  
  140. static void d3_selectUnitMode (Widget w, int selected, caddr_t call_data)
  141.  
  142. {
  143.     Boolean sizeflag, colorflag, toplabelflag, bottlabelflag;
  144.  
  145.     if ((d3_state.color_mode == mono_mode) && (selected == select_color)) {
  146.          ui_xSetToggleState (color, FALSE);    
  147.          return;
  148.     }
  149.     sizeflag = colorflag = toplabelflag = bottlabelflag = FALSE;
  150.     selected_unit_mode = selected;
  151.     switch (selected) {
  152.         case select_size      : sizeflag = TRUE;
  153.                                 d3_setUnitMode (w, temp_unit_mode.size, NULL);
  154.                                 break;
  155.         case select_color     : colorflag = TRUE;
  156.                                 d3_setUnitMode (w, temp_unit_mode.color, NULL);
  157.                                 break;
  158.         case select_toplabel  : toplabelflag = TRUE;
  159.                                 d3_setUnitMode (w, temp_unit_mode.top_label, NULL);
  160.                                 break;
  161.         case select_bottlabel : bottlabelflag = TRUE;
  162.                                 d3_setUnitMode (w, temp_unit_mode.bottom_label, NULL);
  163.                                 break;
  164.     }
  165.     ui_xSetToggleState (size, sizeflag);    
  166.     ui_xSetToggleState (color, colorflag);    
  167.     ui_xSetToggleState (toplabel, toplabelflag);    
  168.     ui_xSetToggleState (bottlabel, bottlabelflag);    
  169. }
  170.  
  171.  
  172. /*****************************************************************************
  173.   FUNCTION : d3_createUnitPannel
  174.  
  175.   PURPOSE  : creates the unit pannel
  176.   RETURNS  : void
  177.   NOTES    :
  178.  
  179.   UPDATE   :
  180. ******************************************************************************/
  181.  
  182. void d3_createUnitPannel (Widget w, Widget button, caddr_t call_data)
  183.  
  184. {
  185.     int n;
  186.     Arg arg[10];
  187.     Position xPos, yPos;
  188.     Dimension width, height;
  189.     Widget unitPannel, border, pannel1, pannel2, done, dummy;
  190.     static Boolean first_call = TRUE;
  191.  
  192.     n = 0;
  193.     XtSetArg (arg[n], XtNwidth, &width); n++;
  194.     XtSetArg (arg[n], XtNheight, &height); n++;
  195.     XtGetValues (button, arg, (unsigned int) n);
  196.  
  197.     XtTranslateCoords (button, 
  198.        (Position) (width / 2), (Position) (height / 2), &xPos, &yPos);
  199.  
  200.     n = 0;
  201.  
  202.     XtSetArg(arg[n], XtNx, xPos); n++;
  203.     XtSetArg(arg[n], XtNy, yPos); n++;
  204.  
  205.     unitPannel = XtCreatePopupShell ("units", transientShellWidgetClass, 
  206.         button, arg, (unsigned int) n);
  207.  
  208.     border = XtCreateManagedWidget("border", boxWidgetClass,
  209.         unitPannel, NULL, ZERO);
  210.  
  211.     pannel1 = XtCreateManagedWidget("pannel1", boxWidgetClass, border, NULL, ZERO);
  212.  
  213.     size = d3_xCreateToggleItem ("size", pannel1, NULL, NULL, NULL);
  214.     color = d3_xCreateToggleItem ("color", pannel1, NULL, NULL, NULL);
  215.     toplabel = d3_xCreateToggleItem ("toplabel", pannel1, NULL, NULL, NULL);
  216.     bottlabel = d3_xCreateToggleItem ("bottlabel", pannel1, NULL, NULL, NULL);
  217.  
  218.     XtAddCallback(size, XtNcallback, (XtCallbackProc) d3_selectUnitMode, (caddr_t) select_size);
  219.       XtAddCallback(color, XtNcallback, (XtCallbackProc) d3_selectUnitMode, (caddr_t) select_color);
  220.     XtAddCallback(toplabel, XtNcallback, (XtCallbackProc) d3_selectUnitMode, (caddr_t) select_toplabel);
  221.     XtAddCallback(bottlabel, XtNcallback, (XtCallbackProc) d3_selectUnitMode, (caddr_t) select_bottlabel);
  222.  
  223.     dummy = ui_xCreateLabelItem (" ", border, d3_fontWidth, NULL, NULL);
  224.  
  225.     pannel2 = XtCreateManagedWidget("pannel2", boxWidgetClass, border, NULL, ZERO);
  226.  
  227.     activation = d3_xCreateToggleItem ("activation", pannel2, NULL, NULL, NULL);
  228.     initact = d3_xCreateToggleItem ("initact", pannel2, NULL, NULL, NULL);
  229.     output = d3_xCreateToggleItem ("output", pannel2, NULL, NULL, NULL);
  230.     bias = d3_xCreateToggleItem ("bias", pannel2, NULL, NULL, NULL);
  231.     name = d3_xCreateToggleItem ("name", pannel2, NULL, NULL, NULL);
  232.     number = d3_xCreateToggleItem ("number", pannel2, NULL, NULL, NULL);
  233.     zvalue = d3_xCreateToggleItem ("zvalue", pannel2, NULL, NULL, NULL);
  234.     nothing = d3_xCreateToggleItem ("nothing", pannel2, NULL, NULL, NULL);
  235.  
  236.     XtAddCallback(activation, XtNcallback, (XtCallbackProc) d3_setUnitMode, (caddr_t) activation_on);
  237.     XtAddCallback(initact, XtNcallback, (XtCallbackProc) d3_setUnitMode, (caddr_t) init_act_on);
  238.     XtAddCallback(output, XtNcallback, (XtCallbackProc) d3_setUnitMode, (caddr_t) output_on);
  239.     XtAddCallback(bias, XtNcallback, (XtCallbackProc) d3_setUnitMode, (caddr_t) bias_on);
  240.     XtAddCallback(name, XtNcallback, (XtCallbackProc) d3_setUnitMode, (caddr_t) name_on);
  241.     XtAddCallback(number, XtNcallback, (XtCallbackProc) d3_setUnitMode, (caddr_t) number_on);
  242.     XtAddCallback(zvalue, XtNcallback, (XtCallbackProc) d3_setUnitMode, (caddr_t) zvalue_on);
  243.     XtAddCallback(nothing, XtNcallback, (XtCallbackProc) d3_setUnitMode, (caddr_t) nothing_on);
  244.  
  245.     done = d3_xCreateButtonItem ("done", border, NULL, NULL);
  246.     XtAddCallback(done, XtNcallback, (XtCallbackProc) d3_closeUnitPannel, (caddr_t) unitPannel);
  247.  
  248.     memcpy (&temp_unit_mode, &d3_state.unit_mode, 
  249.             sizeof (d3_unit_mode_type)); 
  250.  
  251.     if (first_call) {
  252.          selected_unit_mode = select_size;
  253.          toggled_unit_mode = temp_unit_mode.size;
  254.          first_call = FALSE;
  255.     }
  256.  
  257.     d3_selectUnitMode (pannel1, selected_unit_mode, NULL);
  258.     d3_setUnitMode (pannel1, toggled_unit_mode, NULL);
  259.   
  260.     ui_checkWindowPosition(unitPannel);
  261.     XtPopup (unitPannel, XtGrabExclusive);
  262.     ui_xDontResizeWidget(unitPannel); 
  263. }
  264.  
  265.  
  266. /* end of file */
  267. /* lines: 301 */
  268.